package leetcode_bin_tree_test;

/**
 * 剑指 Offer 15. 二进制中1的个数
 */
public class NumberOfBinary {
    // you need to treat n as an unsigned value
    public static int hammingWeight(int n) {
//        String str = Integer.toBinaryString(n);
//        int num = 0;
//        for (int i = 0; i < str.length(); i++) {
//            if (str.charAt(i) == '1') {
//                num ++;
//            }
//        }
//        return num;


        int ret = 0;
//        for (int i = 0; i < 32; i++) {
//            if ((n & (1 << i)) != 0) {
//                ret ++;
//            }
//        }
        while (n != 0) {
            n &= n - 1; // 一直减少n，总共就是看最低位能变多少次0。因为位数不断减少，所以可以一直记录当前是否还有1
            ret ++;
        }
        return ret;
    }

    public static void main(String[] args) {
        int n = -3;
        System.out.println(hammingWeight(n));
    }
}
